package main

import (
	"fmt"
	"strings"
	"unicode"
)

func main() {

	TestFields()
	fmt.Println("-----------------")
	TestFieldsFunc()
	fmt.Println("-----------------")
	TestSplitN()
	fmt.Println("-----------------")
	TestSpilt()
	fmt.Println("-----------------")
	TestSplitAfter()
	fmt.Println("-----------------")
	TestSplitAfterN()
}

// 将字符串以空白字符分割，并返回一个切片
func TestFields() {
	fmt.Println(strings.Fields("  abc 123 ABC xyz XYZ"))
}

// 将字符串以满足 f(r) == true 的字符分割，返回一个切片
func TestFieldsFunc() {
	f := func(c rune) bool {
		//return  c == '='
		return !unicode.IsLetter(c) && !unicode.IsNumber(c)
	}

	fmt.Println(strings.FieldsFunc("abc@123*ABC&xyz%XYZ", f))
}

// 将字符串以 sep 作为分隔符进行分割，分割后字符最后去掉sep
func TestSpilt() {
	fmt.Printf("%q\n", strings.Split("a,b,c", ","))
	fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a "))
	fmt.Printf("%q\n", strings.Split(" xyz ", ""))
	fmt.Printf("%q\n", strings.Split("", "Bernardo C'Higgins"))
}

//将字符串s 以 sep 作为分隔符进行分割，分割后字符最后去掉sep, n 决定返回的切片数
func TestSplitN() {
	fmt.Printf("%q\n", strings.SplitN("a,b,c", ",", 2))
	fmt.Printf("%q\n", strings.SplitN("a,b,c", ",", 5))
}

//将字符串s 以 sep 作为分隔符进行分割，分割后字符最后附上 sep
func TestSplitAfter() {
	fmt.Printf("%q\n", strings.SplitAfter("a,b,c,", ","))
}

//将字符串s 以 sep 作为分隔符进行分割，分割后字符最后附上 sep, n 决定返回的切片数
func TestSplitAfterN() {
	fmt.Printf("%q\n", strings.SplitAfterN("a,b,c", ",", 5))
}
